package com.hengtongxing.hejiayun.base;

import android.util.SparseArray;
import android.view.View;

import androidx.recyclerview.widget.RecyclerView;

/**
 * Time: 2019/4/16
 * Author: ZF
 * Description:
 * <p>
 * ArrayList和LinkedList的大致区别如下:
 * 1.ArrayList是实现了基于动态数组的数据结构，LinkedList基于链表的数据结构。
 * 2.对于随机访问get和set，ArrayList觉得优于LinkedList，因为LinkedList要移动指针。
 * 3.对于新增和删除操作add和remove，LinedList比较占优势，因为ArrayList要移动数据。
 */

public class BaseViewHolder extends RecyclerView.ViewHolder {
    // SparseArray 比 HashMap 更省内存，在某些条件下性能更好，只能存储 key 为 int 类型的数据，
    // 用来存放 View 以减少 findViewById 的次数
    private SparseArray<View> viewSparseArray;
    private View item_view;

    public BaseViewHolder(View itemView) {
        super(itemView);
        this.item_view = itemView;
        viewSparseArray = null;
    }

    /**
     * 根据 ID 来获取 View
     *
     * @param viewId viewID
     * @param <T>    泛型
     * @return 将结果强转为 View 或 View 的子类型
     */
    public <T extends View> T getView(int viewId) {
        // 先从缓存中找，找打的话则直接返回
        // 如果找不到则 findViewById ，再把结果存入缓存中
        if (viewSparseArray == null) {
            viewSparseArray = new SparseArray<>();
        }
        View view = viewSparseArray.get(viewId);
        if (view == null) {
            view = itemView.findViewById(viewId);
            viewSparseArray.put(viewId, view);
        }
        return (T) view;
    }

    public View getItem_view() {
        return item_view;
    }
}
